Neovimをアップデートしたら怒られたので備忘録。調査手順と事前にできる対応
どうも。CX事業本部Delivery部のえーたん(@eetann092)です。
先日Neovimのv0.8.0がリリースされました。 アップデート後、Neovimを起動すると非推奨のAPIについてのメッセージが表示されたため、その対応を記録しておきます。
メッセージ内容と対策
client.resolved_capabilitiesは非推奨
まず最初に表示されたのは、以下のようなメッセージです(適宜改行してます)。LSPの機能判定に使用していたclient.resolved_capabilities
が非推奨になり、代わりにclient.server_capabilities
を使ってください、という内容でした。
[LSP] Accessing client.resolved_capabilities is deprecated, update your plugins or configuration to access client.server_capabilities instead. The new key/value pairs in server_capabilities directly match those defined in the language server protocol Press ENTER or type command to continue
また、対象のLSPがフォーマッター機能を持つ場合は保存時にフォーマットするように設定していました。
if client.resolved_capabilities.document_formatting then vim.api.nvim_create_autocmd({ "BufWritePre" }, { group = "my_nvim_rc", buffer = bufnr, callback = function() vim.lsp.buf.formatting_sync({}, 2500) end, }) end
client.resolved_capabilities
をclient.server_capabilities
に変えても、フォーマッターが動きませんでした。
issueを漁ったところ、リポジトリneovim/nvim-lspconfigに以下のissueがありました。
どうやら、document_formatting
ではなく、documentFormattingProvider
に書き換える必要があったようです。
前述のメッセージのThe new key/value pairs ...
の部分はおそらくこれのことでしょう。
- if client.resolved_capabilities.document_formatting then + if client.server_capabilities.documentFormattingProvider then
vim.lsp.buf.formatting_syncは非推奨
if client.server_capabilities.documentFormattingProvider then
に変えてフォーマッターを動かすと、別のメッセージが表示されました。
vim.lsp.buf.formatting_sync is deprecated. Use vim.lsp.buf.format instead
vim.lsp.buf.formatting_sync
が非推奨になり、代わりにvim.lsp.buf.format
を使ってください、という内容でした。
オプションについては:h vim.lsp.buf.format()
から見ることができます。
事前にできる対応
他の非推奨APIや事前に仕様変更を知りたい場合、どんな方法があるかについても考えてみました。
まずは、アップデート前にリリースノートを見ることです。 リリースノートには、機能追加やバグ修正だけではなく、"Breaking changes"という項目で破壊的な変更の一覧を見ることができます。
:h deprecated
でも一部の非推奨のAPIを見ることができるようです。
もう少し具体的に知りたい場合は、breaking changes Issue #14090 neovim/neovimを見るのが良いと思います。
上記Breaking Changes Issueには、Neovimで破壊的な変更が追加される度に、関連issueへのリンクとその概要が追加されるようです。
resolved_capabilitiesが非推奨になったこともこのissueに書かれていました。
"Subscribe"ボタンを押せば、issueにコメントが追加された時に通知させることができます。
telescope.nvimやnvim-cmpなども同様にBreaking Changes Issueがあるようです。